// 统一封装接口方法
// 每个方法负责请求一个url地址
// 逻辑页面，导入籍人口方法，就能发请求了
// 好处：请求url路径，可以在这里统一管理
import axios from '../utils/request'
// import { getToken } from '../utils/token'

// 登录 - 登录接口
// axios内部，会把参数对象转换成json字符串格式发送后台
// asios内部，会自动携带请求参数（headers）里的Content-Type:'application/json',帮忙添加好
export const loginAPI = ({ mobile, code }) => {
  return axios({
    url: '/v1_0/authorizations',
    method: 'POST',
    data: {
      mobile,
      code
    }
  })
}

// 用户关注
export const userFollowedAPI = ({ userId }) => {
  return axios({
    url: '/v1_0/user/followings',
    method: 'POST',
    data: {
      target: userId
    }
  })
}

// 用户取消关注
export const userUnFollowedAPI = ({ userId }) => {
  return axios({
    url: `/v1_0/user/followings/${userId}`,
    method: 'DELETE'
  })
}
// 用户对文章点赞
export const likeArticleAPI = ({ artId }) => {
  return axios({
    url: '/v1_0/article/likings',
    method: 'POST',
    data: {
      target: artId
    }
  })
}
// 用户对文章取消点赞
export const unLikeArticleAPI = ({ artId }) => {
  return axios({
    url: `/v1_0/article/likings/${artId}`,
    method: 'DELETE'
  })
}

// 频道 -获取所有频道
export const getAllChannelsAPI = () => {
  return axios({
    url: '/v1_0/channels',
    method: 'GET'
  })
}
// 频道 -获取所有频道
export const updateChannelsAPI = ({ channels }) => {
  return axios({
    url: '/v1_0/user/channels',
    method: 'PUT',
    data: {
      channels // 用户已选的整个频道数组
    }
  })
}
// 频道 -删除用户指定频道
export const deleteChannelsAPI = ({ channelId }) => {
  return axios({
    url: `/v1_0/user/channels/${channelId}`,
    method: 'DELETE'
  })
}

// 获取 - 获取用户选择的频道
// 注意：用户没有登录，默认返回后台设置的默认频道列表
export const getUserChanneAPI = () => {
  return axios({
    url: '/v1_0/user/channels',
    method: 'GET'
    // headers: {
    //   Authorization: `Bearer ${getToken()}`
    // }
  })
}

// 文章 - 获取列表
export const getAllArticleList = ({ channel_id, timestamp }) => {
  return axios({
    url: '/v1_0/articles',
    method: 'GET',
    // headers: {
    //   Authorization: `Bearer ${getToken()}`
    // },
    params: { // 这里的参数，axios会帮你拼接在URL?的后面(查询字符串)
      channel_id,
      timestamp
    }
  })
}

// 文章 - 反馈 - 不喜欢不感兴趣
export const dislikeArticleAPI = ({ artId }) => {
  return axios({
    url: '/v1_0/article/dislikes',
    method: 'POST',
    // headers: {
    //   Authorization: `Bearer ${getToken()}`
    // },
    data: {
      target: artId
    }
  })
}

// 文章反馈，反馈垃圾内容 /v1_0/article/reports
export const reportsArticleAPI = ({ artId, type }) => {
  return axios({
    url: '/v1_0/article/reports',
    method: 'POST',
    // headers: {
    //   Authorization: `Bearer ${getToken()}`
    // },
    data: {
      target: artId,
      type: type,
      remark: ''
    }
  })
}

// 文章-获取详情
export const detailAPI = ({ artId }) => {
  return axios({
    url: `/v1_0/articles/${artId}`,
    method: 'GET'
  })
}
// 文章 - 获取 - 评论
export const commentsListAPI = ({ id, offset = null, limit = 10 }) => {
  return axios({
    url: '/v1_0/comments',
    method: 'GET',
    params: { // axios只针对params参数，如果发现键值对，值为null，会忽略此参数名和值不携带url？后面
      type: 'a',
      source: id,
      offset,
      limit
    }
  })
}

// 文章-评论-喜欢
export const commentLikingAPI = ({ comId }) => {
  return axios({
    url: '/v1_0/comment/likings',
    method: 'POST',
    data: {
      target: comId
    }
  })
}
// 文章-评论-取消喜欢
export const commentDisLikingAPI = ({ comId }) => {
  return axios({
    url: `/v1_0/comment/likings/${comId}`,
    method: 'DELETE'
  })
}

// 评论发布
export const commentSendAPI = ({ id, content, art_id = null }) => {
  const obj = {
    target: id,
    content
  }
  if (art_id !== null) {
    obj.art_id = art_id
  }
  return axios({
    url: '/v1_0/comments',
    method: 'POST',
    data: obj
  })
}

// 搜索 - 联想菜单
export const suggestListAPI = ({ keywords }) => {
  return axios({
    url: '/v1_0/suggestion',
    method: 'GET',
    params: {
      q: keywords
    }
  })
}

// 搜索结果列表
export const searchResultAPI = ({ page = 1, per_page = 10, q }) => {
  return axios({
    url: '/v1_0/search',
    method: 'GET',
    params: {
      page,
      per_page,
      q
    }
  })
}

// 获取用户个人信息 /v1_0/user/profile
export const userProfileAPI = () => {
  return axios({
    url: '/v1_0/user/profile',
    method: 'GET'
  })
}

// 获取用户基本信息 /v1_0/user/profile
export const getUserInfoAPI = () => {
  return axios({
    url: '/v1_0/user',
    method: 'GET'
  })
}

// 用户-更新头像
export const updateUserPhotoAPI = (fd) => {
  return axios({
    url: '/v1_0/user/photo',
    method: 'PATCH',
    data: fd // 外面一会传进来的 new FormData() 表单对象
    /*
      如果请求体直接是FormData表单对象，你也不用自己添加
      Content-Type，axios发现数据请求体是表单对象，他也不会转换成json字符串
      也不会携带content-Type：application/json，而是给浏览器，浏览器发现请求体是formData时
      会自己携带content-Type
    */
  })
}
// 用户 - 更新基本资料 updateUserProfileAPI  /v1_0/user/profile
export const updateUserProfileAPI = (dataObj) => {
  // 判断，有什么值，带什么参数给后台
  // 写法1：解构赋值，4个判断，往空对象上添加值加上去
  // 写法2：外面想传几对对象key+value,就直接传入交给后台
  // 写法3：上面的写法不够语义化，我们看不到obj里面有什么
  const obj = {
    name: '',
    gander: 0,
    birthday: '',
    intro: ''
  }

  for (const prop in obj) { // 遍历参数对象里的每个key
    if (dataObj[prop] === undefined) { // 用key去外面传入的参数对象匹配，如果没有找到(证明外面没有传这个键值对)
      delete obj[prop] // 从obj身上删除对应键值对
    } else {
      obj[prop] = dataObj[prop] // 如果使用了，就从外面对象取出对应的key值，保存到obj上
    }
  }
  return axios({
    url: '/v1_0/user/profile',
    method: 'PATCH', // 局部更新  PUT->全部更新
    data: obj
    // {
    //   name, // 昵称
    //   gender, // 性别0：男 1女
    //   birthday, // 生日(要求格式 年-月-日)
    //   intro // 个人介绍

    // }
  })
}
